package com.base.string;

/**
 * 583. 两个字符串的删除操作
 * <p>
 * 给定两个单词 word1 和 word2，找到使得 word1 和 word2 相同所需的最小步数，每步可以删除任意一个字符串中的一个字符。
 *
 * @author leon
 * @date 2021年09月25日 21:38
 */
public class MinDistance {
    /**
     * 最长公共子序列
     * 先求最长公共子序列，然后各自的长度减去公共子序列的长度即可
     *
     *
     * @param word1
     * @param word2
     * @return
     */
    public int minDistance(String word1, String word2) {
        int m = word1.length(), n = word2.length();

        // 首先创建一个（m+1）（n+1)大小的dp数组
        int[][] dp = new int[m+1][n+1];
        for (int i = 1; i < m + 1; i++) {
            char c = word1.charAt(i-1);
            for (int j = 1; j < n + 1; j++) {
                char d = word2.charAt(j-1);

                if (c == d){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else {
                    dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        int commonLen = dp[m][n];
        return m+n-2*commonLen;

    }
}
